package com.chapter17.demo1;


/**
 * 在java.lang包中给出了一个Runnable接口，该接口只有一个run方法，它没有返回值也不接受任何参数。
 *
 * Thread类的构造方法可以接受一个Runnable对象，当线程启动时，线程对象的run方法会自动调用Runnable对象的run方法。
 *
 * 这就有了第二种编写多线程程序的方式：实现Runnable接口，构造Thread类的对象，传入Runnable对象
 *
 * 线程执行的顺序并不是固定的，也不是谁先启动谁先执行，这要由线程调度器来决定。
 * JVM维护了一个可运行线程的队列，调用线程对象的start方法只是把运行task任务的线程加入到了这个列表中，然后start方法返回。
 * 至于加入的线程是否立即运行，就要看当前是否有空闲的CPU，以及是否有其他线程正在运行，这一切都由线程调度器来判
 */
public class PrintTask implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"执行");
    }

    public static void main(String[] args) {
        PrintTask printTask = new PrintTask();

        for (int i=0;i<5;i++){
            //调用线程对象的start方法只是把运行task任务的线程加入到了这个列表中，然后start方法返回。
            new Thread(printTask).start();
        }
        System.out.println(Thread.currentThread().getName()+"执行结束");

    }
}
